home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / VERBS < prev    next >
Text File  |  1991-05-20  |  26KB  |  1,344 lines

  1. /* VAPPLI- MAIN VERB PROCESSING ROUTINE */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. logical vappli_(ri)
  11. integer ri;
  12. {
  13.     /* Initialized data */
  14.  
  15.     const integer mxnop = 39;
  16.     const integer mxsmp = 99;
  17.  
  18.     /* System generated locals */
  19.     integer i__1;
  20.     logical ret_val;
  21.  
  22.     /* Local variables */
  23.     integer melee;
  24.     logical f;
  25.     integer i, j, av;
  26.     integer rmk;
  27.     integer odi2 = 0, odo2 = 0;
  28.  
  29.     ret_val = TRUE_;
  30. /*                         !ASSUME WINS. */
  31.  
  32.     if (prsvec_1.prso > 220) {
  33.     goto L5;
  34.     }
  35.  
  36.     if (prsvec_1.prso != 0) {
  37.     odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
  38.     }
  39. /*                         !SET UP DESCRIPTORS. */
  40. L5:
  41.     if (prsvec_1.prsi != 0) {
  42.     odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
  43.     }
  44.     av = advs_1.avehic[play_1.winner - 1];
  45.     rmk = rnd_(6) + 372;
  46. /*                         !REMARK FOR HACK-HACKS. */
  47.  
  48.     if (ri == 0) {
  49.     goto L10;
  50.     }
  51. /*                         !ZERO IS FALSE. */
  52.     if (ri <= mxnop) {
  53.     return ret_val;
  54.     }
  55. /*                         !NOP? */
  56.     if (ri <= mxsmp) {
  57.     goto L100;
  58.     }
  59. /*                         !SIMPLE VERB? */
  60.     switch (ri - mxsmp) {
  61.     case 1:  goto L18000;
  62.     case 2:  goto L20000;
  63.     case 3:  goto L22000;
  64.     case 4:  goto L23000;
  65.     case 5:  goto L24000;
  66.     case 6:  goto L25000;
  67.     case 7:  goto L26000;
  68.     case 8:  goto L27000;
  69.     case 9:  goto L28000;
  70.     case 10:  goto L29000;
  71.     case 11:  goto L30000;
  72.     case 12:  goto L31000;
  73.     case 13:  goto L32000;
  74.     case 14:  goto L33000;
  75.     case 15:  goto L34000;
  76.     case 16:  goto L35000;
  77.     case 17:  goto L36000;
  78.     case 18:  goto L38000;
  79.     case 19:  goto L39000;
  80.     case 20:  goto L40000;
  81.     case 21:  goto L41000;
  82.     case 22:  goto L42000;
  83.     case 23:  goto L43000;
  84.     case 24:  goto L44000;
  85.     case 25:  goto L45000;
  86.     case 26:  goto L46000;
  87.     case 27:  goto L47000;
  88.     case 28:  goto L48000;
  89.     case 29:  goto L49000;
  90.     case 30:  goto L50000;
  91.     case 31:  goto L51000;
  92.     case 32:  goto L52000;
  93.     case 33:  goto L53000;
  94.     case 34:  goto L55000;
  95.     case 35:  goto L56000;
  96.     case 36:  goto L58000;
  97.     case 37:  goto L59000;
  98.     case 38:  goto L60000;
  99.     case 39:  goto L63000;
  100.     case 40:  goto L64000;
  101.     case 41:  goto L65000;
  102.     case 42:  goto L66000;
  103.     case 43:  goto L68000;
  104.     case 44:  goto L69000;
  105.     case 45:  goto L70000;
  106.     case 46:  goto L71000;
  107.     case 47:  goto L72000;
  108.     case 48:  goto L73000;
  109.     case 49:  goto L74000;
  110.     case 50:  goto L77000;
  111.     case 51:  goto L78000;
  112.     case 52:  goto L80000;
  113.     case 53:  goto L81000;
  114.     case 54:  goto L82000;
  115.     case 55:  goto L83000;
  116.     case 56:  goto L84000;
  117.     case 57:  goto L85000;
  118.     case 58:  goto L86000;
  119.     case 59:  goto L87000;
  120.     case 60:  goto L88000;
  121.     }
  122.     bug_(7, ri);
  123.  
  124. /* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */
  125.  
  126. L10:
  127.     ret_val = FALSE_;
  128. /*                         !LOSE. */
  129.     return ret_val;
  130.  
  131. /* SIMPLE VERBS ARE HANDLED EXTERNALLY. */
  132.  
  133. L100:
  134.     ret_val = sverbs_(ri);
  135.     return ret_val;
  136. /* VAPPLI, PAGE 3 */
  137.  
  138. /* V100--    READ.  OUR FIRST REAL VERB. */
  139.  
  140. L18000:
  141.     if (lit_(play_1.here)) {
  142.     goto L18100;
  143.     }
  144. /*                         !ROOM LIT? */
  145.     rspeak_(356);
  146. /*                         !NO, CANT READ. */
  147.     return ret_val;
  148.  
  149. L18100:
  150.     if (prsvec_1.prsi == 0) {
  151.     goto L18200;
  152.     }
  153. /*                         !READ THROUGH OBJ? */
  154.     if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TRANBT) != 0) {
  155.     goto L18200;
  156.     }
  157.     rspsub_(357, odi2);
  158. /*                         !NOT TRANSPARENT. */
  159.     return ret_val;
  160.  
  161. L18200:
  162.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & READBT) != 0) {
  163.     goto L18300;
  164.     }
  165.     rspsub_(358, odo2);
  166. /*                         !NOT READABLE. */
  167.     return ret_val;
  168.  
  169. L18300:
  170.     if (! objact_()) {
  171.     rspeak_(objcts_1.oread[prsvec_1.prso - 1]);
  172.     }
  173.     return ret_val;
  174.  
  175. /* V101--    MELT.  UNLESS OBJECT HANDLES, JOKE. */
  176.  
  177. L20000:
  178.     if (! objact_()) {
  179.     rspsub_(361, odo2);
  180.     }
  181.     return ret_val;
  182.  
  183. /* V102--    INFLATE.  WORKS ONLY WITH BOATS. */
  184.  
  185. L22000:
  186.     if (! objact_()) {
  187.     rspeak_(368);
  188.     }
  189. /*                         !OBJ HANDLE? */
  190.     return ret_val;
  191.  
  192. /* V103--    DEFLATE. */
  193.  
  194. L23000:
  195.     if (! objact_()) {
  196.     rspeak_(369);
  197.     }
  198. /*                         !OBJ HANDLE? */
  199.     return ret_val;
  200. /* VAPPLI, PAGE 4 */
  201.  
  202. /* V104--    ALARM.  IF SLEEPING, WAKE HIM UP. */
  203.  
  204. L24000:
  205.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & SLEPBT) == 0) {
  206.     goto L24100;
  207.     }
  208.     ret_val = objact_();
  209. /*                         !SLEEPING, LET OBJ DO. */
  210.     return ret_val;
  211.  
  212. L24100:
  213.     rspsub_(370, odo2);
  214. /*                         !JOKE. */
  215.     return ret_val;
  216.  
  217. /* V105--    EXORCISE.  OBJECTS HANDLE. */
  218.  
  219. L25000:
  220.     f = objact_();
  221. /*                         !OBJECTS HANDLE. */
  222.     return ret_val;
  223.  
  224. /* V106--    PLUG.  LET OBJECTS HANDLE. */
  225.  
  226. L26000:
  227.     if (! objact_()) {
  228.     rspeak_(371);
  229.     }
  230.     return ret_val;
  231.  
  232. /* V107--    KICK.  IF OBJECT IGNORES, JOKE. */
  233.  
  234. L27000:
  235.     if (! objact_()) {
  236.     rspsb2_(378, odo2, rmk);
  237.     }
  238.     return ret_val;
  239.  
  240. /* V108--    WAVE.  SAME. */
  241.  
  242. L28000:
  243.     if (! objact_()) {
  244.     rspsb2_(379, odo2, rmk);
  245.     }
  246.     return ret_val;
  247.  
  248. /* V109,V110--    RAISE, LOWER.  SAME. */
  249.  
  250. L29000:
  251. L30000:
  252.     if (! objact_()) {
  253.     rspsb2_(380, odo2, rmk);
  254.     }
  255.     return ret_val;
  256.  
  257. /* V111--    RUB.  SAME. */
  258.  
  259. L31000:
  260.     if (! objact_()) {
  261.     rspsb2_(381, odo2, rmk);
  262.     }
  263.     return ret_val;
  264.  
  265. /* V112--    PUSH.  SAME. */
  266.  
  267. L32000:
  268.     if (! objact_()) {
  269.     rspsb2_(382, odo2, rmk);
  270.     }
  271.     return ret_val;
  272. /* VAPPLI, PAGE 5 */
  273.  
  274. /* V113--    UNTIE.  IF OBJECT IGNORES, JOKE. */
  275.  
  276. L33000:
  277.     if (objact_()) {
  278.     return ret_val;
  279.     }
  280. /*                         !OBJECT HANDLE? */
  281.     i = 383;
  282. /*                         !NO, NOT TIED. */
  283.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) == 0) {
  284.     i = 384;
  285.     }
  286.     rspeak_(i);
  287.     return ret_val;
  288.  
  289. /* V114--    TIE.  NEVER REALLY WORKS. */
  290.  
  291. L34000:
  292.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) != 0) {
  293.     goto L34100;
  294.     }
  295.     rspeak_(385);
  296. /*                         !NOT TIEABLE. */
  297.     return ret_val;
  298.  
  299. L34100:
  300.     if (! objact_()) {
  301.     rspsub_(386, odo2);
  302.     }
  303. /*                         !JOKE. */
  304.     return ret_val;
  305.  
  306. /* V115--    TIE UP.  NEVER REALLY WORKS. */
  307.  
  308. L35000:
  309.     if ((objcts_1.oflag2[prsvec_1.prsi - 1] & TIEBT) != 0) {
  310.     goto L35100;
  311.     }
  312.     rspsub_(387, odo2);
  313. /*                         !NOT TIEABLE. */
  314.     return ret_val;
  315.  
  316. L35100:
  317.     i = 388;
  318. /*                         !ASSUME VILLAIN. */
  319.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
  320.     i = 389;
  321.     }
  322.     rspsub_(i, odo2);
  323. /*                         !JOKE. */
  324.     return ret_val;
  325.  
  326. /* V116--    TURN.  OBJECT MUST HANDLE. */
  327.  
  328. L36000:
  329.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TURNBT) != 0) {
  330.     goto L36100;
  331.     }
  332.     rspeak_(390);
  333. /*                         !NOT TURNABLE. */
  334.     return ret_val;
  335.  
  336. L36100:
  337.     if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0) {
  338.     goto L36200;
  339.     }
  340.     rspsub_(391, odi2);
  341. /*                         !NOT A TOOL. */
  342.     return ret_val;
  343.  
  344. L36200:
  345.     ret_val = objact_();
  346. /*                         !LET OBJECT HANDLE. */
  347.     return ret_val;
  348.  
  349. /* V117--    BREATHE.  BECOMES INFLATE WITH LUNGS. */
  350.  
  351. L38000:
  352.     prsvec_1.prsa = vindex_1.inflaw;
  353.     prsvec_1.prsi = oindex_1.lungs;
  354.     goto L22000;
  355. /*                         !HANDLE LIKE INFLATE. */
  356.  
  357. /* V118--    KNOCK.  MOSTLY JOKE. */
  358.  
  359. L39000:
  360.     if (objact_()) {
  361.     return ret_val;
  362.     }
  363. /*                         !OBJ HANDLE? */
  364.     i = 394;
  365. /*                         !JOKE FOR DOOR. */
  366.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
  367.     i = 395;
  368.     }
  369.     rspsub_(i, odo2);
  370. /*                         !JOKE FOR NONDOORS TOO. */
  371.     return ret_val;
  372.  
  373. /* V119--    LOOK. */
  374.  
  375. L40000:
  376.     if (prsvec_1.prso != 0) {
  377.     goto L41500;
  378.     }
  379. /*                         !SOMETHING TO LOOK AT? */
  380.     ret_val = rmdesc_(3);
  381. /*                         !HANDLED BY RMDESC. */
  382.     return ret_val;
  383.  
  384. /* V120--    EXAMINE. */
  385.  
  386. L41000:
  387.     if (prsvec_1.prso != 0) {
  388.     goto L41500;
  389.     }
  390. /*                         !SOMETHING TO EXAMINE? */
  391.     ret_val = rmdesc_(0);
  392. /*                         !HANDLED BY RMDESC. */
  393.     return ret_val;
  394.  
  395. L41500:
  396.     if (objact_()) {
  397.     return ret_val;
  398.     }
  399. /*                         !OBJ HANDLE? */
  400.     i = objcts_1.oread[prsvec_1.prso - 1];
  401. /*                         !GET READING MATERIAL. */
  402.     if (i != 0) {
  403.     rspeak_(i);
  404.     }
  405. /*                         !OUTPUT IF THERE, */
  406.     if (i == 0) {
  407.     rspsub_(429, odo2);
  408.     }
  409. /*                         !OTHERWISE DEFAULT. */
  410.     prsvec_1.prsa = vindex_1.foow;
  411. /*                         !DEFUSE ROOM PROCESSORS. */
  412.     return ret_val;
  413.  
  414. /* V121--    SHAKE.  IF HOLLOW OBJECT, SOME ACTION. */
  415.  
  416. L42000:
  417.     if (objact_()) {
  418.     return ret_val;
  419.     }
  420. /*                         !OBJECT HANDLE? */
  421.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
  422.     goto L42100;
  423.     }
  424.     rspeak_(371);
  425. /*                         !JOKE FOR VILLAINS. */
  426.     return ret_val;
  427.  
  428. L42100:
  429.     if (qempty_(prsvec_1.prso) || (objcts_1.oflag1[prsvec_1.prso - 1] & 
  430.         TAKEBT) == 0) {
  431.     goto L10;
  432.     }
  433.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
  434.     goto L42300;
  435.     }
  436. /*                         !OPEN?  SPILL. */
  437.     rspsub_(396, odo2);
  438. /*                         !NO, DESCRIBE NOISE. */
  439.     return ret_val;
  440.  
  441. L42300:
  442.     rspsub_(397, odo2);
  443. /*                         !SPILL THE WORKS. */
  444.     i__1 = objcts_1.olnt;
  445.     for (i = 1; i <= i__1; ++i) {
  446. /*                         !SPILL CONTENTS. */
  447.     if (objcts_1.ocan[i - 1] != prsvec_1.prso) {
  448.         goto L42500;
  449.     }
  450. /*                         !INSIDE? */
  451.     objcts_1.oflag2[i - 1] |= TCHBT;
  452.     if (av == 0) {
  453.         goto L42400;
  454.     }
  455. /*                         !IN VEHICLE? */
  456.     newsta_(i, 0, 0, av, 0);
  457. /*                         !YES, SPILL IN THERE. */
  458.     goto L42500;
  459.  
  460. L42400:
  461.     newsta_(i, 0, play_1.here, 0, 0);
  462. /*                         !NO, SPILL ON FLOOR, */
  463.     if (i == oindex_1.water) {
  464.         newsta_(i, 133, 0, 0, 0);
  465.     }
  466. /*                         !BUT WATER DISAPPEARS. */
  467. L42500:
  468.     ;
  469.     }
  470.     return ret_val;
  471.  
  472. /* V122--    MOVE.  MOSTLY JOKES. */
  473.  
  474. L43000:
  475.     if (objact_()) {
  476.     return ret_val;
  477.     }
  478. /*                         !OBJ HANDLE? */
  479.     i = 398;
  480. /*                         !ASSUME NOT HERE. */
  481.     if (qhere_(prsvec_1.prso, play_1.here)) {
  482.     i = 399;
  483.     }
  484.     rspsub_(i, odo2);
  485. /*                         !JOKE. */
  486.     return ret_val;
  487. /* VAPPLI, PAGE 6 */
  488.  
  489. /* V123--    TURN ON. */
  490.  
  491. L44000:
  492.     f = lit_(play_1.here);
  493. /*                         !RECORD IF LIT. */
  494.     if (objact_()) {
  495.     goto L44300;
  496.     }
  497. /*                         !OBJ HANDLE? */
  498.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 && 
  499.         objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
  500.     goto L44100;
  501.     }
  502.     rspeak_(400);
  503. /*                         !CANT DO IT. */
  504.     return ret_val;
  505.  
  506. L44100:
  507.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) == 0) {
  508.     goto L44200;
  509.     }
  510.     rspeak_(401);
  511. /*                         !ALREADY ON. */
  512.     return ret_val;
  513.  
  514. L44200:
  515.     objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT;
  516.     rspsub_(404, odo2);
  517. L44300:
  518.     if (! f && lit_(play_1.here)) {
  519.     f = rmdesc_(0);
  520.     }
  521. /*                         !ROOM NEWLY LIT. */
  522.     return ret_val;
  523.  
  524. /* V124--    TURN OFF. */
  525.  
  526. L45000:
  527.     if (objact_()) {
  528.     goto L45300;
  529.     }
  530. /*                         !OBJ HANDLE? */
  531.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 && 
  532.         objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
  533.     goto L45100;
  534.     }
  535.     rspeak_(402);
  536. /*                         !CANT DO IT. */
  537.     return ret_val;
  538.  
  539. L45100:
  540.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) != 0) {
  541.     goto L45200;
  542.     }
  543.     rspeak_(403);
  544. /*                         !ALREADY OFF. */
  545.     return ret_val;
  546.  
  547. L45200:
  548.     objcts_1.oflag1[prsvec_1.prso - 1] &= ~ ONBT;
  549.     rspsub_(405, odo2);
  550. L45300:
  551.     if (! lit_(play_1.here)) {
  552.     rspeak_(406);
  553.     }
  554. /*                         !MAY BE DARK. */
  555.     return ret_val;
  556.  
  557. /* V125--    OPEN.  A FINE MESS. */
  558.  
  559. L46000:
  560.     if (objact_()) {
  561.     return ret_val;
  562.     }
  563. /*                         !OBJ HANDLE? */
  564.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
  565.     goto L46100;
  566.     }
  567. L46050:
  568.     rspsub_(407, odo2);
  569. /*                         !NOT OPENABLE. */
  570.     return ret_val;
  571.  
  572. L46100:
  573.     if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
  574.     goto L46200;
  575.     }
  576.     rspsub_(408, odo2);
  577. /*                         !NOT OPENABLE. */
  578.     return ret_val;
  579.  
  580. L46200:
  581.     if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
  582.     goto L46225;
  583.     }
  584.     rspeak_(412);
  585. /*                         !ALREADY OPEN. */
  586.     return ret_val;
  587.  
  588. L46225:
  589.     objcts_1.oflag2[prsvec_1.prso - 1] |= OPENBT;
  590.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0 || 
  591.         qempty_(prsvec_1.prso)) {
  592.     goto L46300;
  593.     }
  594.     princo_(prsvec_1.prso, 410);
  595. /*                         !PRINT CONTENTS. */
  596.     return ret_val;
  597.  
  598. L46300:
  599.     rspeak_(409);
  600. /*                         !DONE */
  601.     return ret_val;
  602.  
  603. /* V126--    CLOSE. */
  604.  
  605. L47000:
  606.     if (objact_()) {
  607.     return ret_val;
  608.     }
  609. /*                         !OBJ HANDLE? */
  610.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) == 0) {
  611.     goto L46050;
  612.     }
  613.     if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
  614.     goto L47100;
  615.     }
  616.     rspsub_(411, odo2);
  617. /*                         !NOT CLOSABLE. */
  618.     return ret_val;
  619.  
  620. L47100:
  621.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
  622.     goto L47200;
  623.     }
  624. /*                         !OPEN? */
  625.     rspeak_(413);
  626. /*                         !NO, JOKE. */
  627.     return ret_val;
  628.  
  629. L47200:
  630.     objcts_1.oflag2[prsvec_1.prso - 1] &= ~ OPENBT;
  631.     rspeak_(414);
  632. /*                         !DONE. */
  633.     return ret_val;
  634. /* VAPPLI, PAGE 7 */
  635.  
  636. /* V127--    FIND.  BIG MEGILLA. */
  637.  
  638. L48000:
  639.     if (objact_()) {
  640.     return ret_val;
  641.     }
  642. /*                         !OBJ HANDLE? */
  643.     i = 415;
  644. /*                         !DEFAULT CASE. */
  645.     if (qhere_(prsvec_1.prso, play_1.here)) {
  646.     goto L48300;
  647.     }
  648. /*                         !IN ROOM? */
  649.     if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
  650.     goto L48200;
  651.     }
  652. /*                         !ON WINNER? */
  653.     j = objcts_1.ocan[prsvec_1.prso - 1];
  654. /*                         !DOWN ONE LEVEL. */
  655.     if (j == 0) {
  656.     goto L10;
  657.     }
  658.     if ((objcts_1.oflag1[j - 1] & TRANBT) == 0 && (! ((
  659.         objcts_1.oflag2[j - 1] & OPENBT) != 0) || (
  660.         objcts_1.oflag1[j - 1] & DOORBT + CONTBT) == 0))
  661.          {
  662.     goto L10;
  663.     }
  664.     i = 417;
  665. /*                         !ASSUME IN ROOM. */
  666.     if (qhere_(j, play_1.here)) {
  667.     goto L48100;
  668.     }
  669.     if (objcts_1.oadv[j - 1] != play_1.winner) {
  670.     goto L10;
  671.     }
  672. /*                         !NOT HERE OR ON PERSON. */
  673.     i = 418;
  674. L48100:
  675.     rspsub_(i, objcts_1.odesc2[j - 1]);
  676. /*                         !DESCRIBE FINDINGS. */
  677.     return ret_val;
  678.  
  679. L48200:
  680.     i = 416;
  681. L48300:
  682.     rspsub_(i, odo2);
  683. /*                         !DESCRIBE FINDINGS. */
  684.     return ret_val;
  685.  
  686. /* V128--    WAIT.  RUN CLOCK DEMON. */
  687.  
  688. L49000:
  689.     rspeak_(419);
  690. /*                         !TIME PASSES. */
  691.     for (i = 1; i <= 3; ++i) {
  692.     if (clockd_()) {
  693.         return ret_val;
  694.     }
  695. /* L49100: */
  696.     }
  697.     return ret_val;
  698.  
  699. /* V129--    SPIN. */
  700. /* V159--    TURN TO. */
  701.  
  702. L50000:
  703. L88000:
  704.     if (! objact_()) {
  705.     rspeak_(663);
  706.     }
  707. /*                         !IF NOT OBJ, JOKE. */
  708.     return ret_val;
  709.  
  710. /* V130--    BOARD.  WORKS WITH VEHICLES. */
  711.  
  712. L51000:
  713.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
  714.     goto L51100;
  715.     }
  716.     rspsub_(421, odo2);
  717. /*                         !NOT VEHICLE, JOKE. */
  718.     return ret_val;
  719.  
  720. L51100:
  721.     if (qhere_(prsvec_1.prso, play_1.here)) {
  722.     goto L51200;
  723.     }
  724. /*                         !HERE? */
  725.     rspsub_(420, odo2);
  726. /*                         !NO, JOKE. */
  727.     return ret_val;
  728.  
  729. L51200:
  730.     if (av == 0) {
  731.     goto L51300;
  732.     }
  733. /*                         !ALREADY GOT ONE? */
  734.     rspsub_(422, odo2);
  735. /*                         !YES, JOKE. */
  736.     return ret_val;
  737.  
  738. L51300:
  739.     if (objact_()) {
  740.     return ret_val;
  741.     }
  742. /*                         !OBJ HANDLE? */
  743.     rspsub_(423, odo2);
  744. /*                         !DESCRIBE. */
  745.     advs_1.avehic[play_1.winner - 1] = prsvec_1.prso;
  746.     if (play_1.winner != aindex_1.player) {
  747.     objcts_1.ocan[advs_1.aobj[play_1.winner - 1] - 1] = prsvec_1.prso;
  748.     }
  749.     return ret_val;
  750.  
  751. /* V131--    DISEMBARK. */
  752.  
  753. L52000:
  754.     if (av == prsvec_1.prso) {
  755.     goto L52100;
  756.     }
  757. /*                         !FROM VEHICLE? */
  758.     rspeak_(424);
  759. /*                         !NO, JOKE. */
  760.     return ret_val;
  761.  
  762. L52100:
  763.     if (objact_()) {
  764.     return ret_val;
  765.     }
  766. /*                         !OBJ HANDLE? */
  767.     if ((rooms_1.rflag[play_1.here - 1] & RLAND) != 0) {
  768.     goto L52200;
  769.     }
  770.     rspeak_(425);
  771. /*                         !NOT ON LAND. */
  772.     return ret_val;
  773.  
  774. L52200:
  775.     advs_1.avehic[play_1.winner - 1] = 0;
  776.     rspeak_(426);
  777.     if (play_1.winner != aindex_1.player) {
  778.     newsta_(advs_1.aobj[play_1.winner - 1], 0, play_1.here, 0, 0);
  779.     }
  780.     return ret_val;
  781.  
  782. /* V132--    TAKE.  HANDLED EXTERNALLY. */
  783.  
  784. L53000:
  785.     ret_val = take_(1);
  786.     return ret_val;
  787.  
  788. /* V133--    INVENTORY.  PROCESSED EXTERNALLY. */
  789.  
  790. L55000:
  791.     invent_(play_1.winner);
  792.     return ret_val;
  793. /* VAPPLI, PAGE 8 */
  794.  
  795. /* V134--    FILL.  STRANGE DOINGS WITH WATER. */
  796.  
  797. L56000:
  798.     if (prsvec_1.prsi != 0) {
  799.     goto L56050;
  800.     }
  801. /*                         !ANY OBJ SPECIFIED? */
  802.     if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) != 
  803.         0) {
  804.     goto L56025;
  805.     }
  806.     rspeak_(516);
  807. /*                         !NOTHING TO FILL WITH. */
  808.     prsvec_1.prswon = FALSE_;
  809. /*                         !YOU LOSE. */
  810.     return ret_val;
  811.  
  812. L56025:
  813.     prsvec_1.prsi = oindex_1.gwate;
  814. /*                         !USE GLOBAL WATER. */
  815. L56050:
  816.     if (objact_()) {
  817.     return ret_val;
  818.     }
  819. /*                         !OBJ HANDLE? */
  820.     if (prsvec_1.prsi != oindex_1.gwate && prsvec_1.prsi != oindex_1.water) {
  821.     rspsb2_(444, odi2, odo2);
  822.     }
  823.     return ret_val;
  824.  
  825. /* V135,V136--    EAT/DRINK */
  826.  
  827. L58000:
  828. L59000:
  829.     if (objact_()) {
  830.     return ret_val;
  831.     }
  832. /*                         !OBJ HANDLE? */
  833.     if (prsvec_1.prso == oindex_1.gwate) {
  834.     goto L59500;
  835.     }
  836. /*                         !DRINK GLOBAL WATER? */
  837.     if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & FOODBT) != 0)) {
  838.     goto L59400;
  839.     }
  840. /*                         !EDIBLE? */
  841.     if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
  842.     goto L59200;
  843.     }
  844. /*                         !YES, ON WINNER? */
  845. L59100:
  846.     rspsub_(454, odo2);
  847. /*                         !NOT ACCESSIBLE. */
  848.     return ret_val;
  849.  
  850. L59200:
  851.     if (prsvec_1.prsa == vindex_1.drinkw) {
  852.     goto L59300;
  853.     }
  854. /*                         !DRINK FOOD? */
  855.     newsta_(prsvec_1.prso, 455, 0, 0, 0);
  856. /*                         !NO, IT DISAPPEARS. */
  857.     return ret_val;
  858.  
  859. L59300:
  860.     rspeak_(456);
  861. /*                         !YES, JOKE. */
  862.     return ret_val;
  863.  
  864. L59400:
  865.     if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & DRNKBT) != 0)) {
  866.     goto L59600;
  867.     }
  868. /*                         !DRINKABLE? */
  869.     if (objcts_1.ocan[prsvec_1.prso - 1] == 0) {
  870.     goto L59100;
  871.     }
  872. /*                         !YES, IN SOMETHING? */
  873.     if (objcts_1.oadv[objcts_1.ocan[prsvec_1.prso - 1] - 1] != play_1.winner) 
  874.         {
  875.     goto L59100;
  876.     }
  877.     if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] & 
  878.         OPENBT) != 0) {
  879.     goto L59500;
  880.     }
  881. /*                         !CONT OPEN? */
  882.     rspeak_(457);
  883. /*                         !NO, JOKE. */
  884.     return ret_val;
  885.  
  886. L59500:
  887.     newsta_(prsvec_1.prso, 458, 0, 0, 0);
  888. /*                         !GONE. */
  889.     return ret_val;
  890.  
  891. L59600:
  892.     rspsub_(453, odo2);
  893. /*                         !NOT FOOD OR DRINK. */
  894.     return ret_val;
  895.  
  896. /* V137--    BURN.  COMPLICATED. */
  897.  
  898. L60000:
  899.     if ((objcts_1.oflag1[prsvec_1.prsi - 1] & FLAMBT + 
  900.         LITEBT + ONBT) != FLAMBT + 
  901.         LITEBT + ONBT) {
  902.     goto L60400;
  903.     }
  904.     if (objact_()) {
  905.     return ret_val;
  906.     }
  907. /*                         !OBJ HANDLE? */
  908.     if (objcts_1.ocan[prsvec_1.prso - 1] != oindex_1.recep) {
  909.     goto L60050;
  910.     }
  911. /*                         !BALLOON? */
  912.     if (oappli_(objcts_1.oactio[oindex_1.ballo - 1], 0)) {
  913.     return ret_val;
  914.     }
  915. /*                         !DID IT HANDLE? */
  916. L60050:
  917.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & BURNBT) == 0) {
  918.     goto L60300;
  919.     }
  920.     if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) {
  921.     goto L60100;
  922.     }
  923. /*                         !CARRYING IT? */
  924.     rspsub_(459, odo2);
  925.     jigsup_(460);
  926.     return ret_val;
  927.  
  928. L60100:
  929.     j = objcts_1.ocan[prsvec_1.prso - 1];
  930. /*                         !GET CONTAINER. */
  931.     if (qhere_(prsvec_1.prso, play_1.here) || av != 0 && j == av) {
  932.     goto L60200;
  933.     }
  934.     if (j == 0) {
  935.     goto L60150;
  936.     }
  937. /*                         !INSIDE? */
  938.     if (! ((objcts_1.oflag2[j - 1] & OPENBT) != 0)) {
  939.     goto L60150;
  940.     }
  941. /*                         !OPEN? */
  942.     if (qhere_(j, play_1.here) || av != 0 && objcts_1.ocan[j - 1] == av) {
  943.     goto L60200;
  944.     }
  945. L60150:
  946.     rspeak_(461);
  947. /*                         !CANT REACH IT. */
  948.     return ret_val;
  949.  
  950. L60200:
  951.     rspsub_(462, odo2);
  952. /*                         !BURN IT. */
  953.     newsta_(prsvec_1.prso, 0, 0, 0, 0);
  954.     return ret_val;
  955.  
  956. L60300:
  957.     rspsub_(463, odo2);
  958. /*                         !CANT BURN IT. */
  959.     return ret_val;
  960.  
  961. L60400:
  962.     rspsub_(301, odi2);
  963. /*                         !CANT BURN IT WITH THAT. */
  964.     return ret_val;
  965. /* VAPPLI, PAGE 9 */
  966.  
  967. /* V138--    MUNG.  GO TO COMMON ATTACK CODE. */
  968.  
  969. L63000:
  970.     i = 466;
  971. /*                         !CHOOSE PHRASE. */
  972.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
  973.     goto L66100;
  974.     }
  975.     if (! objact_()) {
  976.     rspsb2_(466, odo2, rmk);
  977.     }
  978.     return ret_val;
  979.  
  980. /* V139--    KILL.  GO TO COMMON ATTACK CODE. */
  981.  
  982. L64000:
  983.     i = 467;
  984. /*                         !CHOOSE PHRASE. */
  985.     goto L66100;
  986.  
  987. /* V140--    SWING.  INVERT OBJECTS, FALL THRU TO ATTACK. */
  988.  
  989. L65000:
  990.     j = prsvec_1.prso;
  991. /*                         !INVERT. */
  992.     prsvec_1.prso = prsvec_1.prsi;
  993.     prsvec_1.prsi = j;
  994.     j = odo2;
  995.     odo2 = odi2;
  996.     odi2 = j;
  997.     prsvec_1.prsa = vindex_1.attacw;
  998. /*                         !FOR OBJACT. */
  999.  
  1000. /* V141--    ATTACK.  FALL THRU TO ATTACK CODE. */
  1001.  
  1002. L66000:
  1003.     i = 468;
  1004.  
  1005. /* COMMON MUNG/ATTACK/SWING/KILL CODE. */
  1006.  
  1007. L66100:
  1008.     if (prsvec_1.prso != 0) {
  1009.     goto L66200;
  1010.     }
  1011. /*                         !ANYTHING? */
  1012.     rspeak_(469);
  1013. /*                         !NO, JOKE. */
  1014.     return ret_val;
  1015.  
  1016. L66200:
  1017.     if (objact_()) {
  1018.     return ret_val;
  1019.     }
  1020. /*                         !OBJ HANDLE? */
  1021.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
  1022.     goto L66300;
  1023.     }
  1024.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0) {
  1025.     rspsub_(470, odo2);
  1026.     }
  1027.     return ret_val;
  1028.  
  1029. L66300:
  1030.     j = 471;
  1031. /*                         !ASSUME NO WEAPON. */
  1032.     if (prsvec_1.prsi == 0) {
  1033.     goto L66500;
  1034.     }
  1035.     if ((objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) == 0) {
  1036.     goto L66400;
  1037.     }
  1038.     melee = 1;
  1039. /*                         !ASSUME SWORD. */
  1040.     if (prsvec_1.prsi != oindex_1.sword) {
  1041.     melee = 2;
  1042.     }
  1043. /*                         !MUST BE KNIFE. */
  1044.     i = blow_(aindex_1.player, prsvec_1.prso, melee, 1, 0);
  1045. /*                         !STRIKE BLOW. */
  1046.     return ret_val;
  1047.  
  1048. L66400:
  1049.     j = 472;
  1050. /*                         !NOT A WEAPON. */
  1051. L66500:
  1052.     rspsb2_(i, odo2, j);
  1053. /*                         !JOKE. */
  1054.     return ret_val;
  1055. /* VAPPLI, PAGE 10 */
  1056.  
  1057. /* V142--    WALK.  PROCESSED EXTERNALLY. */
  1058.  
  1059. L68000:
  1060.     ret_val = walk_();
  1061.     return ret_val;
  1062.  
  1063. /* V143--    TELL.  PROCESSED IN GAME. */
  1064.  
  1065. L69000:
  1066.     rspeak_(603);
  1067.     return ret_val;
  1068.  
  1069. /* V144--    PUT.  PROCESSED EXTERNALLY. */
  1070.  
  1071. L70000:
  1072.     ret_val = put_(1);
  1073.     return ret_val;
  1074.  
  1075. /* V145,V146,V147,V148--    DROP/GIVE/POUR/THROW */
  1076.  
  1077. L71000:
  1078. L72000:
  1079. L73000:
  1080. L74000:
  1081.     ret_val = drop_(0);
  1082.     return ret_val;
  1083.  
  1084. /* V149--    SAVE */
  1085.  
  1086. L77000:
  1087.     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
  1088.     goto L77100;
  1089.     }
  1090.     rspeak_(828);
  1091. /*                         !NO SAVES IN ENDGAME. */
  1092.     return ret_val;
  1093.  
  1094. L77100:
  1095.     savegm_();
  1096.     return ret_val;
  1097.  
  1098. /* V150--    RESTORE */
  1099.  
  1100. L78000:
  1101.     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
  1102.     goto L78100;
  1103.     }
  1104.     rspeak_(829);
  1105. /*                         !NO RESTORES IN ENDGAME. */
  1106.     return ret_val;
  1107.  
  1108. L78100:
  1109.     rstrgm_();
  1110.     return ret_val;
  1111. /* VAPPLI, PAGE 11 */
  1112.  
  1113. /* V151--    HELLO */
  1114.  
  1115. L80000:
  1116.     if (prsvec_1.prso != 0) {
  1117.     goto L80100;
  1118.     }
  1119. /*                         !ANY OBJ? */
  1120.     i__1 = rnd_(4) + 346;
  1121.     rspeak_(i__1);
  1122. /*                         !NO, VANILLA HELLO. */
  1123.     return ret_val;
  1124.  
  1125. L80100:
  1126.     if (prsvec_1.prso != oindex_1.aviat) {
  1127.     goto L80200;
  1128.     }
  1129. /*                         !HELLO AVIATOR? */
  1130.     rspeak_(350);
  1131. /*                         !NOTHING HAPPENS. */
  1132.     return ret_val;
  1133.  
  1134. L80200:
  1135.     if (prsvec_1.prso != oindex_1.sailo) {
  1136.     goto L80300;
  1137.     }
  1138. /*                         !HELLO SAILOR? */
  1139.     ++state_1.hs;
  1140. /*                         !COUNT. */
  1141.     i = 351;
  1142. /*                         !GIVE NORMAL OR */
  1143.     if (state_1.hs % 10 == 0) {
  1144.     i = 352;
  1145.     }
  1146. /*                         !RANDOM MESSAGE. */
  1147.     if (state_1.hs % 20 == 0) {
  1148.     i = 353;
  1149.     }
  1150.     rspeak_(i);
  1151. /*                         !SPEAK UP. */
  1152.     return ret_val;
  1153.  
  1154. L80300:
  1155.     if (objact_()) {
  1156.     return ret_val;
  1157.     }
  1158. /*                         !OBJ HANDLE? */
  1159.     i = 354;
  1160. /*                         !ASSUME VILLAIN. */
  1161.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT + 
  1162.         ACTRBT) == 0) {
  1163.     i = 355;
  1164.     }
  1165.     rspsub_(i, odo2);
  1166. /*                         !HELLO THERE */
  1167. /*                         ! */
  1168.     return ret_val;
  1169.  
  1170. /* V152--    LOOK INTO */
  1171.  
  1172. L81000:
  1173.     if (objact_()) {
  1174.     return ret_val;
  1175.     }
  1176. /*                         !OBJ HANDLE? */
  1177.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
  1178.     goto L81300;
  1179.     }
  1180.     if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
  1181.     goto L81200;
  1182.     }
  1183. /*                         !OPEN? */
  1184.     rspsub_(628, odo2);
  1185. /*                         !OPEN DOOR- UNINTERESTING. */
  1186.     return ret_val;
  1187.  
  1188. L81200:
  1189.     rspsub_(525, odo2);
  1190. /*                         !CLOSED DOOR- CANT SEE. */
  1191.     return ret_val;
  1192.  
  1193. L81300:
  1194.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
  1195.     goto L81400;
  1196.     }
  1197.     if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0 || (
  1198.         objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0) {
  1199.     goto L81400;
  1200.     }
  1201.     if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
  1202.     goto L81200;
  1203.     }
  1204.     rspsub_(630, odo2);
  1205. /*                         !CANT LOOK INSIDE. */
  1206.     return ret_val;
  1207.  
  1208. L81400:
  1209.     if (qempty_(prsvec_1.prso)) {
  1210.     goto L81500;
  1211.     }
  1212. /*                         !VEH OR SEE IN.  EMPTY? */
  1213.     princo_(prsvec_1.prso, 573);
  1214. /*                         !NO, LIST CONTENTS. */
  1215.     return ret_val;
  1216.  
  1217. L81500:
  1218.     rspsub_(629, odo2);
  1219. /*                         !EMPTY. */
  1220.     return ret_val;
  1221.  
  1222. /* V153--    LOOK UNDER */
  1223.  
  1224. L82000:
  1225.     if (! objact_()) {
  1226.     rspeak_(631);
  1227.     }
  1228. /*                         !OBJECT HANDLE? */
  1229.     return ret_val;
  1230. /* VAPPLI, PAGE 12 */
  1231.  
  1232. /* V154--    PUMP */
  1233.  
  1234. L83000:
  1235.     if (objcts_1.oroom[oindex_1.pump - 1] == play_1.here || objcts_1.oadv[
  1236.         oindex_1.pump - 1] == play_1.winner) {
  1237.     goto L83100;
  1238.     }
  1239.     rspeak_(632);
  1240. /*                         !NO. */
  1241.     return ret_val;
  1242.  
  1243. L83100:
  1244.     prsvec_1.prsi = oindex_1.pump;
  1245. /*                         !BECOMES INFLATE */
  1246.     prsvec_1.prsa = vindex_1.inflaw;
  1247. /*                         !X WITH PUMP. */
  1248.     goto L22000;
  1249. /*                         !DONE. */
  1250.  
  1251. /* V155--    WIND */
  1252.  
  1253. L84000:
  1254.     if (! objact_()) {
  1255.     rspsub_(634, odo2);
  1256.     }
  1257. /*                         !OBJ HANDLE? */
  1258.     return ret_val;
  1259.  
  1260. /* V156--    CLIMB */
  1261. /* V157--    CLIMB UP */
  1262. /* V158--    CLIMB DOWN */
  1263.  
  1264. L85000:
  1265. L86000:
  1266. L87000:
  1267.     i = xsrch_1.xup;
  1268. /*                         !ASSUME UP. */
  1269.     if (prsvec_1.prsa == vindex_1.clmbdw) {
  1270.     i = xsrch_1.xdown;
  1271.     }
  1272. /*                         !UNLESS CLIMB DN. */
  1273.     f = (objcts_1.oflag2[prsvec_1.prso - 1] & CLMBBT) != 0;
  1274.     if (f && findxt_(i, play_1.here)) {
  1275.     goto L87500;
  1276.     }
  1277. /*                         !ANYTHING TO CLIMB? */
  1278.     if (objact_()) {
  1279.     return ret_val;
  1280.     }
  1281. /*                         !OBJ HANDLE? */
  1282.     i = 657;
  1283.     if (f) {
  1284.     i = 524;
  1285.     }
  1286. /*                         !VARIETY OF JOKES. */
  1287.     if (! f && (prsvec_1.prso == oindex_1.wall || prsvec_1.prso >= 
  1288.         oindex_1.wnort && prsvec_1.prso <= oindex_1.wnort + 3)) {
  1289.     i = 656;
  1290.     }
  1291.     rspeak_(i);
  1292. /*                         !JOKE. */
  1293.     return ret_val;
  1294.  
  1295. L87500:
  1296.     prsvec_1.prsa = vindex_1.walkw;
  1297. /*                         !WALK */
  1298.     prsvec_1.prso = i;
  1299. /*                         !IN SPECIFIED DIR. */
  1300.     ret_val = walk_();
  1301.     return ret_val;
  1302.  
  1303. } /* vappli_ */
  1304.  
  1305. /* CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS */
  1306.  
  1307. /* DECLARATIONS */
  1308.  
  1309. logical clockd_()
  1310. {
  1311.     /* System generated locals */
  1312.     integer i__1;
  1313.     logical ret_val;
  1314.  
  1315.     /* Local variables */
  1316.     integer i;
  1317.  
  1318.     ret_val = FALSE_;
  1319. /*                         !ASSUME NO ACTION. */
  1320.     i__1 = cevent_1.clnt;
  1321.     for (i = 1; i <= i__1; ++i) {
  1322.     if (! cevent_1.cflag[i - 1] || cevent_1.ctick[i - 1] == 0) {
  1323.         goto L100;
  1324.     }
  1325.     if (cevent_1.ctick[i - 1] < 0) {
  1326.         goto L50;
  1327.     }
  1328. /*                         !PERMANENT ENTRY? */
  1329.     --cevent_1.ctick[i - 1];
  1330.     if (cevent_1.ctick[i - 1] != 0) {
  1331.         goto L100;
  1332.     }
  1333. /*                         !TIMER EXPIRED? */
  1334. L50:
  1335.     ret_val = TRUE_;
  1336.     cevapp_(cevent_1.cactio[i - 1]);
  1337. /*                         !DO ACTION. */
  1338. L100:
  1339.     ;
  1340.     }
  1341.     return ret_val;
  1342.  
  1343. } /* clockd_ */
  1344.